# ⚡ BruteSSH

![memes](mem.jpeg)

BruteSSH - это утилита для автоматического перебора паролей
SSH сервера написанная на **C++**

## ❗ Отказ от ответственности

> Этот инструмент предназначен только для целей этического тестирования.
>
> Автор не несёт ответственности за неправильное использование
> пользователями данной программы.
>
> Пользователи должны действовать в соответствии с правилами местного законодательства.

## 🔍 Requirements

- BruteSSH использует [libssh](http://www.libssh.org/)
- Библиотека [args](https://github.com/Taywee/args)
- Библиотека [thread-pool](https://github.com/bshoshany/thread-pool)
- Сканер уязвимостей [nuclei](https://github.com/projectdiscovery/nuclei)
  и дополнительные расширения:
  - Шаблоны [nuclei-templates](https://github.com/projectdiscovery/nuclei-templates)
  - Обнаружение [honeypots](https://github.com/UnaPibaGeek/honeypots-detection)

## 📌 Installing

Установим необходимые пакеты:

- Debian/Kali/Ubuntu

```bash
sudo apt install git make cmake g++ libssh-dev
```

- Arch/Manjaro/

```bash
sudo pacman -S git make cmake g++ libssh
```

- Red Hat/CentOS/Fedora (Не тестировал)

```bash
sudo yum install git make cmake g++ libssh-devel
```

Далее запускаем [install.sh](install.sh), который проверит и установит нужные зависимости.

Примечание:

> Если у вас не установлен [nuclei](https://github.com/projectdiscovery/nuclei),
> то необходимо проверить наличие программы [go](https://golang.org/doc/install)
> последней версии для её установки!

```bash
sudo chmod +x install.sh
./install.sh # В некоторых местах потребует права root!
make
```

## 📌 Run

```text
$ ./brutessh -h
  ./brutessh {OPTIONS}

    ╭━━╮╱╱╱╭╮╱╱╭━━┳━━┳╮╭╮
    ┃╭╮┣┳┳┳┫╰┳━┫━━┫━━┫╰╯┃
    ┃╭╮┃╭┫┃┃╭┫┻╋━━┣━━┃╭╮┃
    ╰━━┻╯╰━┻━┻━┻━━┻━━┻╯╰╯

  OPTIONS:

      arguments
        -t[target], --target=[target]     The ip addres brutforce
        -u[username], --user=[username]   The username brutforce
        -f[file_password]                 The file to be processed passwords
        -F[file_password_user]            The file to be processed passwords and
                                          user
        -o[file_output],
        --output=[file_output]            The file to be processed log
        -s, --scan_ssh                    Detected ssh server(nuclei),
                                          default=false
        -H, --honeypots                   Servers detected as honeypots(nuclei),
                                          default=false
        -T[threads], --threads=[threads]  Max threads to scan, default={кол-во ядер}
        -v, --version                     Print version programm
        -p[port], --port=[port]           Port server, default=22
        -h, --help                        Print help message
```

- Пример простого запуска брутфорса SSH сервера:

```text
./brutessh -t <IP> -u <пользователь> -f <файл_с_паролями> -o <имя_файла_для_логов>
./brutessh -t 127.0.0.1 -u root -f password.txt -o log_file.txt
```

- Поддерживаемые форматы чтения паролей из файлов:

Для чтения только паролей, необходимо в параметрах
запуска указать флаг **-f** (рекомендованный параметр).

```text
...
<password>
1234
root
...
```

Для конкретного подключения к пользователю с определённым паролем,
нужно в параметрах запуска указать флаг **-F**.

Файл с пользователями и паролями должен быть определённого вида,
одна строка состоит из 2-х слов(`<users>` и `<password>`)разделённые пробелом,
если будет как-то иначе, строка передаст неправильные данные для подключения к ssh.

```text
...
<users> <password>
root 1234
root root
user 1234
...
```

- Запуск сканирование цели на наличие **ssh** сервера и **honeypots**:
  1. **-s** - сканируем цель на наличие **ssh** сервера и возможной информации
  2. **-H** - сканируем цель на наличие **honeypots** с помощью данного [github](https://github.com/UnaPibaGeek/honeypots-detection/)

Можно запускать сразу несколько методов.

Например, запустим 2 сканирования с сохранением информации в определённый файл.

```text
./brutessh -t 127.0.0.1 -s -H -o <имя_файла_для_логов>
```

- При указании флага **-o**, в `<имя_файла_для_логов>` будет сохраняться вся
  информация от brutessh, но дополнительно будут созданы отдельные
  файлы с результатом сканирования **nuclei**.

Примечание:

> Отдедельно будут созданы файлы **nuclei_honeypot.log**,
> в котором будут сохранены результаты сканирования ssh от nuclei(флаг **-s**).
>
> В другой файле **nuclei_ssh.log** будут сохраняться результаты
> сканирования honeypot-ов(флаг **-H**).

- Можно определить количество потоков используя флаг **-T**.
  Значением по умолчанию будет использовано количество ядер в процессоре.

Не рекомендую устанавливать **нечётное** количество потоков.
Будет увеличена время работы программы!

- В коде добавлено много комментариев для более лёгкого анализа :)

## 📑 End

Вдохновлён репозиторием ✨[cbrutekrag](https://github.com/matricali/cbrutekrag)✨

До следующей встречи!
